"""
日志配置模块
"""
import os
import logging.handlers
from datetime import datetime
import colorlog

# 基础日志路径
BASE_LOG_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'logs')
if not os.path.exists(BASE_LOG_DIR):
    os.makedirs(BASE_LOG_DIR)

# 日志文件路径
ACCESS_LOG = os.path.join(BASE_LOG_DIR, 'access.log')
ERROR_LOG = os.path.join(BASE_LOG_DIR, 'error.log')
INFO_LOG = os.path.join(BASE_LOG_DIR, 'info.log')
DEBUG_LOG = os.path.join(BASE_LOG_DIR, 'debug.log')

# 日志颜色配置
LOG_COLORS = {
    'DEBUG': 'white',
    'INFO': 'green',
    'WARNING': 'yellow',
    'ERROR': 'red',
    'CRITICAL': 'red,bg_white',
}

# 日志格式
LOGGING_FORMAT = '[%(asctime)s] [%(levelname)s] [%(module)s:%(funcName)s:%(lineno)d] - %(message)s'
REQUEST_FORMAT = '[%(asctime)s] [%(levelname)s] [%(module)s:%(funcName)s:%(lineno)d] [%(request_id)s] - %(message)s'
COLOR_FORMAT = '%(log_color)s' + LOGGING_FORMAT + '%(reset)s'
COLOR_REQUEST_FORMAT = '%(log_color)s' + REQUEST_FORMAT + '%(reset)s'

# 日志配置
LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': LOGGING_FORMAT,
            'datefmt': '%Y-%m-%d %H:%M:%S'
        },
        'request': {
            'format': REQUEST_FORMAT,
            'datefmt': '%Y-%m-%d %H:%M:%S'
        },
        'colored': {
            '()': 'colorlog.ColoredFormatter',
            'format': COLOR_FORMAT,
            'datefmt': '%Y-%m-%d %H:%M:%S',
            'log_colors': LOG_COLORS
        },
        'colored_request': {
            '()': 'colorlog.ColoredFormatter',
            'format': COLOR_REQUEST_FORMAT,
            'datefmt': '%Y-%m-%d %H:%M:%S',
            'log_colors': LOG_COLORS
        },
        'simple': {
            'format': '[%(asctime)s] [%(levelname)s] - %(message)s',
            'datefmt': '%Y-%m-%d %H:%M:%S'
        }
    },
    'filters': {
        'request_id': {
            '()': 'app.utils.log_utils.RequestIdFilter'
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'colored',
            'filters': []
        },
        'console_request': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'colored_request',
            'filters': ['request_id']
        },
        'access': {
            'level': 'INFO',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': ACCESS_LOG,
            'when': 'midnight',
            'interval': 1,
            'backupCount': 30,
            'formatter': 'request',
            'filters': ['request_id'],
            'encoding': 'utf-8'
        },
        'info': {
            'level': 'INFO',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': INFO_LOG,
            'when': 'midnight',
            'interval': 1,
            'backupCount': 30,
            'formatter': 'standard',
            'encoding': 'utf-8'
        },
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': ERROR_LOG,
            'when': 'midnight',
            'interval': 1,
            'backupCount': 30,
            'formatter': 'standard',
            'encoding': 'utf-8'
        },
        'debug': {
            'level': 'DEBUG',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': DEBUG_LOG,
            'when': 'midnight',
            'interval': 1,
            'backupCount': 7,
            'formatter': 'standard',
            'encoding': 'utf-8'
        }
    },
    'loggers': {
        'app': {
            'handlers': ['console', 'info', 'error', 'debug'],
            'level': 'DEBUG',
            'propagate': True
        },
        'app.request': {
            'handlers': ['console_request', 'access'],
            'level': 'INFO',
            'propagate': False
        },
        'werkzeug': {
            'handlers': ['console', 'access'],
            'level': 'INFO',
            'propagate': False
        },
        'sqlalchemy.engine': {
            'handlers': ['console', 'debug'],
            'level': 'INFO',
            'propagate': False
        }
    }
} 